
package com.javaleague.persistencia.mysql;

import com.javaleague.Mensaje;
import com.javaleague.sesionUsuario.Usuario;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * @author TaixMiguel
 */
public class DAOMensajesPrivados {
    public static boolean writeMessage(int idUserCreador, int tokenUser, String userLector, String message, String subject) {
        Connection conexion = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        Usuario user = null;
        boolean resultado = false;
        
        conexion = Conexion.getConexion();
        try {
            pst = conexion.prepareStatement("SELECT nombreU FROM usuario WHERE idU=? AND tokenUser=?");
            pst.setInt(1, idUserCreador);
            pst.setInt(2, tokenUser);           
            
            rs = pst.executeQuery();
            if (rs.next()) {
                pst = conexion.prepareStatement("SELECT idU FROM usuario WHERE nombreU= ?");
                pst.setString(1, userLector);
                
                rs = pst.executeQuery();
                if (rs.next()) {
                    pst = conexion.prepareStatement("INSERT INTO mensaje (idSender, idReceiver, idParentMSG, texto, asunto) VALUES (?, ?, ?, ?, ?)");
                    pst.setInt(1, idUserCreador);
                    pst.setInt(2, rs.getInt("idU"));
                    pst.setInt(3, 0);
                    pst.setString(4, message);
                    pst.setString(5, subject);
                    
                    pst.execute();
                    resultado = true;
                }
            }
        } catch (Exception ex){
        } finally {
            try {
                conexion.close();
            } catch (SQLException ex) {
                Logger.getLogger(DAOMensajesPrivados.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        
        return resultado;
    }
    
    public static ArrayList<Mensaje> readMessages(int id, int tokenUser) {
        Connection conexion = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        ArrayList<Mensaje> mensajes = new ArrayList<Mensaje>();
        
        conexion = Conexion.getConexion();
        try {
            pst = conexion.prepareStatement("SELECT idU FROM usuario WHERE idU=? AND tokenUser=?");
            pst.setInt(1, id);
            pst.setInt(2, tokenUser);
            
            rs = pst.executeQuery();            
            
            if (rs.next()) {                
                CallableStatement spLogin = conexion.prepareCall("{ call spObtenerMensajes(?) }");
                spLogin.setInt(1, id);

                rs = spLogin.executeQuery();
                
                while (rs.next()) {
                    Mensaje mensa = new Mensaje(rs.getInt("idM"), rs.getString("Sender"), rs.getString("Receiver"), rs.getString("asunto"), rs.getString("texto"), 
                        rs.getString("fMensaje"), rs.getInt("idParentMSG"), rs.getBoolean("leidoReceiver"));

                    mensajes.add(mensa);
                }
            }
        
        
        } catch (SQLException ex) {
                Logger.getLogger(DAOMensajesPrivados.class.getName()).log(Level.SEVERE, null, ex);
        }
        return mensajes;
    }
}